<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>WeakSet</title>
</head>

<body>
  <script>
    /*
                  WeakSet结构和Set结构
      相同点： 1. 都是不重复的值的集合
      不同点： 1. WeakSet成员只能是对象，而不能是其他类型的值
              2. 没有size属性无法遍历成员 
    */
    const ws = new WeakSet()
    // ws.add(1)// TypeError: Invalid value used in weak set
    // ws.add(Symbol())//TypeError: Invalid value used in weak set

    /*
      方法：1. add(value): 向WeakSet添加一个新的成员
           2. delete(value): 清除WeakSet实例的指定成员
           3. has(value): 返回一个布尔值，标识某个值是否存在WeakSet实例中
    */
    const obj = {}
    const foo = {}
    
    ws.add(window)
    ws.add(obj)
    console.log(ws.has(window)) //true
    console.log(ws.has(foo)) //false
    console.log(ws.delete(window)) //true
    console.log(ws.has(window)) //false

  </script>
</body>

</html>